package 算法;

import java.util.Stack;

/**
 * Created by zzy on 2018/4/25.
 */
public class 有效的括号 {


    public static void main(String[] args) {
        String kh="([)]";
        System.out.println(isValid(kh));
    }

    //匹配则丢弃的方式
    public static boolean isValid(String s) {

        if(s.length()%2!=0){
            return false;
        }
       Stack<String> stack=new Stack<>();
       for(int i=0;i<s.length();i++){
            String get= null;
            if(stack.size()>0){
                get=stack.pop();
            }
            if(get==null){
                stack.push(String.valueOf(s.charAt(i)));//压栈
            }else{
                if(!check(get,String.valueOf(s.charAt(i)))){
                    stack.push(get);
                    stack.push(String.valueOf(s.charAt(i)));
                }
            }
       }

       if(stack.size()==0){
           return true;
       }
       return false;
    }

    //
    public static boolean check(String a,String b){
        //()[]{}

        if(a.equals("(")&&b.equals(")")){
            return true;
        }
        if(a.equals("[")&&b.equals("]")){
            return true;
        }
        if(a.equals("{")&&b.equals("}")){
            return true;
        }
        return false;
    }
}
